package com.sh.rpc.protocol;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


/**
 * 协议消息结构     头+体
 * @author sh
 * @param <T>
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProtocolMessage<T> {


    private Header header;

    private T body;

    /**
     * 协议消息头
     */
     @Data
    public static class Header{
        /**
         * 魔数  安全 1字节
         */
        private byte magic;

        /**
         * 协议版本号  1字节
         */
        private byte version;

        /**
         * 序列化器  1字节
         */
        private byte serializer;

        /**
         * 消息类型  1字节  请求 响应的标识
         */
        private byte type;

        /**
         * 消息状态码  1字节  成功 失败 异常等
         */
        private byte status;

        /**
         * 请求id  8字节  唯一标识
         */
        private long requestId;

        /**
         * 消息体长度  4字节  决定到底怎么读取消息体
         */
        private int bodyLength;

    }

}
